﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using MJM.CONCURSO.EN;
using MJM.CONCURSO.CN;

namespace wRegPadron.Formularios
{
    public partial class Concurso : System.Web.UI.Page
    {
        protected void ScriptCierra()
        {
            StringBuilder sb = new StringBuilder("<script language='javascript' type='text/javascript'>");
            sb.Append("$('#panelpreguntas').modal('hide')");
            //$('#myModal').modal('show')
            sb.Append("</script>");
            Page.ClientScript.RegisterStartupScript(typeof(Page), "cerrar", sb.ToString());

        }

        protected void ScriptAbre()
        {
            StringBuilder sb = new StringBuilder("<script language='javascript' type='text/javascript'>");
            sb.Append("$('#panelpregunas').modal('show')");
            sb.Append("</script>");
            Page.ClientScript.RegisterStartupScript(typeof(Page), "cerrar", sb.ToString());

        }

        protected void LimpiarCamposPregunta()
        {
            tvPreguntas.Nodes.Clear();
            txtRespuesta.Text = "";
            txtPregunta.Text = "";
            lblCantidad.Text = "0";            
            hfIdPregunta.Value = "0";
            lblErrorPregunta.Text = "";            
            lblErrorPreguntas.Text = "";
            rRespuestas.DataSource = null;
            rRespuestas.DataBind();
        }

        protected void LimpiarCamposConcurso()
        {
            txtCantidadGanadores.Text = "";
            txtHoraInicio.Text = "";
            txtHoraFin.Text = "";
            txtHoraSorteo.Text = "";
            txtPremio.Text = "";
            txtTitulo.Text = "";
            hfIdConcurso.Value = "0";
            lblError.Text = "";
            lblGuardado.Text = "";
        }

        private void LlenarDatosprueba()
        {
            txtTitulo.Text = "Concurso";
            txtPremio.Text = "Entradas";
            txtCantidadGanadores.Text = "10";
            txtHoraInicio.Text = "15:30";
            txtHoraFin.Text = "16:00";
            txtHoraSorteo.Text = "18:00";
        }

        private bool ValidaCampoHora(TextBox txt)
        {
            string str = txt.Text;
            if (str.Trim().Length != 5)
                return false;
            else
            {
                try
                {
                    if (Convert.ToInt32(str.Substring(0, 2)) < 0 || Convert.ToInt32(str.Substring(0, 2)) > 23)
                        return false;

                    if (Convert.ToInt32(str.Substring(3, 2)) < 0 || Convert.ToInt32(str.Substring(3, 2)) > 59)
                        return false;
                    if (str.Substring(2, 1) != ":")
                        return false;
                }
                catch
                {
                    return false;
                }
            }
            return true;
        }

        private bool Campolleno(TextBox txt)
        {
            if (txt.Text.Trim() == "")
                return false;
            return true;
        }

        private void CargarPreguntas()
        {
            tvPreguntas.Nodes.Clear();
            List<PreguntaEN> lstPreguntas = new List<PreguntaEN>();
            List<RespuestaEN> lstRespuesta = new List<RespuestaEN>();
            lstPreguntas = PreguntaCN.ListarPreguntasConcurso(Convert.ToInt32(hfIdConcurso.Value));
            for (int i = 0; i < lstPreguntas.Count; i++)
            {
                var nodo = new TreeNode();
                nodo.Text = lstPreguntas[i].Numero.ToString() + ". " + lstPreguntas[i].Pregunta;
                tvPreguntas.Nodes.Add(nodo);
                var objRespuesta = new RespuestaEN();
                objRespuesta.IDPregunta = lstPreguntas[i].ID;
                lstRespuesta = RespuestaCN.Listar(objRespuesta);
                for (int j = 0; j < lstRespuesta.Count; j++)
                {
                    var nodo2 = new TreeNode();
                    nodo2.Text = lstRespuesta[j].Letra + ". " + lstRespuesta[j].Respuesta;
                    tvPreguntas.Nodes[i].ChildNodes.Add(nodo2);
                }
            }
            lblCantidad.Text = tvPreguntas.Nodes.Count.ToString();
            tvPreguntas.ExpandAll();
            /*
            rPreguntas.DataSource = PreguntaCN.ListarPreguntasConcurso(Convert.ToInt32(hfIdConcurso.Value));
            rPreguntas.DataBind();
            lblCantidad.Text = rPreguntas.Items.Count.ToString();*/
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!Page.IsPostBack)
                {
                    string usuario = Request.QueryString["user"].ToString();
                    string pass = Request.QueryString["pass"].ToString();
                    lblTitulo.Text = "Registro de concurso";
                    pNoRegistro.Visible = false;
                    //LlenarDatosprueba();
                    FechaInicio.SelectedDate = DateTime.Today;
                    FechaFin.SelectedDate = DateTime.Today;
                    FechaSorteo.SelectedDate = DateTime.Today;
                    hfIdConcurso.Value = "0";
                    hfIdPregunta.Value = "0";
                    pPreguntas.Enabled = false;
                    lblCantidad.Text = "0";
                    btnConfirmacion.Enabled = false;
                    btnCancelar.Enabled = false;
                    if (ConcursoCN.ExisteConcurso())
                    {
                        btnGuardarConcurso.Enabled = false;
                        lblNoRegistro.Text = "No es posible registrar un nuevo concurso porque ya existe uno en proceso.";
                        pNoRegistro.Visible = true;
                    }
                }
            }
            catch
            {
                Response.Redirect("http://gestion.munijesusmaria.gob.pe/appweb/wperspad/Login.aspx");
            }
        }

        protected void btnAgregarRespuesta_Click(object sender, EventArgs e)
        {
            if (txtRespuesta.Text.Trim() != "")
            {
                if (rRespuestas.Items.Count < 5)
                {
                    List<MJM.CONCURSO.EN.RespuestaEN> lst = new List<MJM.CONCURSO.EN.RespuestaEN>();

                    for (int i = 0; i < rRespuestas.Items.Count; i++)
                    {
                        var obj = new MJM.CONCURSO.EN.RespuestaEN();
                        obj.Letra = ((Label)rRespuestas.Items[i].FindControl("lblLetra")).Text;
                        obj.Respuesta = ((Label)rRespuestas.Items[i].FindControl("lblRespuesta")).Text;
                        obj.EsCorrecta = Convert.ToInt32(((HiddenField)rRespuestas.Items[i].FindControl("hfEsCorrecta")).Value);
                        lst.Add(obj);
                    }

                    var nuevo = new MJM.CONCURSO.EN.RespuestaEN();
                    if (rRespuestas.Items.Count == 0)
                        nuevo.Letra = "A";
                    if (rRespuestas.Items.Count == 1)
                        nuevo.Letra = "B";
                    if (rRespuestas.Items.Count == 2)
                        nuevo.Letra = "C";
                    if (rRespuestas.Items.Count == 3)
                        nuevo.Letra = "D";
                    if (rRespuestas.Items.Count == 4)
                        nuevo.Letra = "E";
                    nuevo.Respuesta = txtRespuesta.Text;
                    if (cbEsCorrecta.Checked)
                        nuevo.EsCorrecta = 1;
                    lst.Add(nuevo);
                    rRespuestas.DataSource = lst;
                    rRespuestas.DataBind();
                    txtRespuesta.Text = "";
                   
                }
                else
                {
                    lblErrorPregunta.Text = "No puede ingresar más opciones";
                }
            }
            else
                lblErrorPregunta.Text = "Ingrese la respuesta";
            ModalPopupExtender1.Show();
        }

        protected void rPreguntas_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            //int total = rPreguntas.Items.Count;
            int index = e.Item.ItemIndex;
            int IdPregunta = Convert.ToInt32(((HiddenField)e.Item.FindControl("id")).Value);
            Repeater listaPreguntas = ((Repeater)(e.Item.FindControl("rListRespuestas")));
            var objRespuesta = new RespuestaEN();
            objRespuesta.IDPregunta = IdPregunta;
            listaPreguntas.DataSource = RespuestaCN.Listar(objRespuesta);
            listaPreguntas.DataBind();
        }

        protected void btnGuardarPregunta_Click(object sender, EventArgs e)
        {
            //guarda las respuestas y acitva las preguntas
            //List<RespuestaEN> lst=new List<RespuestaEN>();
            int value, contador;
            contador = 0;
            if (rRespuestas.Items.Count > 0)
            {
                for (int i = 0; i < rRespuestas.Items.Count; i++)
                {
                    var obj = new RespuestaEN();
                    obj.Existe = 1;
                    obj.Letra = ((Label)rRespuestas.Items[i].FindControl("lblLetra")).Text;
                    obj.Respuesta = ((Label)rRespuestas.Items[i].FindControl("lblRespuesta")).Text;
                    obj.EsCorrecta = Convert.ToInt32(((HiddenField)rRespuestas.Items[i].FindControl("hfEsCorrecta")).Value);
                    obj.IDPregunta = Convert.ToInt32(hfIdPregunta.Value);
                    value = RespuestaCN.Insertar(obj);
                    if (value > 0)
                        contador++;
                    //lst.Add(obj);
                }
                if (contador == rRespuestas.Items.Count)
                {
                    value = PreguntaCN.Activar(Convert.ToInt32(hfIdPregunta.Value));                    
                    ModalPopupExtender1.Hide();
                    txtRespuesta.Text = "";
                    lblErrorRespuestas.Text = "";
                    lblErrorPreguntas.Text = "";
                    txtPregunta.Text = "";
                    hfIdPregunta.Value = "0";
                    rRespuestas.DataSource = null;
                    rRespuestas.DataBind();
                    CargarPreguntas();
                    btnConfirmacion.Enabled = true;
                    btnCancelar.Enabled = true;
                }
                else
                {
                    lblErrorRespuestas.Text = "Algunas respuestas no puedieron guardarse";
                    ModalPopupExtender1.Show();
                }
            }
            else
            {
                lblErrorRespuestas.Text = "Ingrese las opciones para esta pregunta";
                ModalPopupExtender1.Show();
            }
        }

        protected void btnPregunta_Click(object sender, EventArgs e)
        {           
            if (Campolleno(txtPregunta))
            {
                int value = 0;
                PreguntaEN objPreguntaEN = new PreguntaEN();
                objPreguntaEN.IDConcurso = Convert.ToInt32(hfIdConcurso.Value);
                objPreguntaEN.Pregunta = txtPregunta.Text;
                objPreguntaEN.Numero = Convert.ToInt32(lblCantidad.Text) + 1;

                value = PreguntaCN.Insertar(objPreguntaEN);
                if (value > 0)
                {
                    hfIdPregunta.Value = value.ToString();
                    lblPreguntaInsertada.Text = txtPregunta.Text;
                    lblErrorPreguntas.Text = "";
                    ModalPopupExtender1.Show();
                    //lblCantidad.Text = (objPreguntaEN.Numero++).ToString();
                }
                else
                {
                    lblErrorPreguntas.Text = "No se pudo registrar la pregunta, intente nuevamente.";
                }
            }
            else
            {
                lblErrorPreguntas.Text = "Ingrese la pregunta que desea ingresar";
            }
        }

        protected void btnGuardarConcurso_Click(object sender, EventArgs e)
        {
            //DateTime dt1 = ((DateTime)CalendarioInicio.SelectedDate.Value);
            if (Campolleno(txtTitulo) && Campolleno(txtPremio) && Campolleno(txtCantidadGanadores))
            {
                if (ValidaCampoHora(txtHoraInicio) && ValidaCampoHora(txtHoraFin) && ValidaCampoHora(txtHoraSorteo))
                {
                    DateTime dt1 = FechaInicio.SelectedDate;
                    DateTime dt2 = FechaFin.SelectedDate;
                    DateTime dt3 = FechaSorteo.SelectedDate;
                    Int64 fin = Convert.ToInt64(dt2.Year.ToString() + (100 + dt2.Month).ToString().Substring(1, 2) + (100 + dt2.Day).ToString().Substring(1, 2) + txtHoraFin.Text.Substring(0, 2) + txtHoraFin.Text.Substring(3, 2));
                    Int64 inicio = Convert.ToInt64(dt1.Year.ToString() + (100 + dt1.Month).ToString().Substring(1, 2) + (100 + dt1.Day).ToString().Substring(1, 2) + txtHoraInicio.Text.Substring(0, 2) + txtHoraInicio.Text.Substring(3, 2));
                    Int64 sorteo = Convert.ToInt64(dt3.Year.ToString() + (100 + dt3.Month).ToString().Substring(1, 2) + (100 + dt3.Day).ToString().Substring(1, 2) + txtHoraSorteo.Text.Substring(0, 2) + txtHoraSorteo.Text.Substring(3, 2));
                    if (sorteo > fin && fin > inicio)
                    {
                        ConcursoEN obj = new ConcursoEN();
                        if (txtCantidadGanadores.Text.Trim() != "")
                            obj.CantidadGanadores = Convert.ToInt32(txtCantidadGanadores.Text);
                        obj.FechaFin = dt2.Year.ToString() + (100 + dt2.Month).ToString().Substring(1, 2) + (100 + dt2.Day).ToString().Substring(1, 2);
                        obj.FechaInicio = dt1.Year.ToString() + (100 + dt1.Month).ToString().Substring(1, 2) + (100 + dt1.Day).ToString().Substring(1, 2);
                        obj.FechaSorteo = dt3.Year.ToString() + (100 + dt3.Month).ToString().Substring(1, 2) + (100 + dt3.Day).ToString().Substring(1, 2);
                        obj.HoraInicio = txtHoraInicio.Text;
                        obj.HoraFin = txtHoraFin.Text;
                        obj.HoraSorteo = txtHoraSorteo.Text;
                        obj.Premio = txtPremio.Text;
                        obj.Titulo = txtTitulo.Text;
                        int value = ConcursoCN.Insertar(obj);
                        if (value == 0)
                        {
                            lblError.Text = "No se pudo registrar";
                            lblGuardado.Text = "";
                            pPreguntas.Enabled = false;
                        }
                        else
                        {
                            lblError.Text = "";
                            lblGuardado.Text = "Datos del concurso correctos. Ingrese las preguntas para completar el proceso.";
                            hfIdConcurso.Value = value.ToString();
                            pDatosConcurso.Enabled = false;
                            pPreguntas.Enabled = true;
                            btnConfirmacion.Enabled = true;
                            btnCancelar.Enabled = true;
                        }
                    }
                    else
                        lblError.Text = "El inicio (fecha y hora) debe ser antes de la fecha de fin y de sorteo del concurso";
                }
                else
                {
                    lblError.Text = "Verifique que las horas ingresadas estén en el formato correcto";
                }
            }
            else
            {
                lblError.Text = "Verifique que los campos solicitados estén llenos";
            }
        }

        protected void btncierra_Click(object sender, EventArgs e)
        {
            ModalPopupExtender1.Hide();
            lblErrorPreguntas.Text = "";
            lblErrorRespuestas.Text = "";
            txtRespuesta.Text = "";
            txtPregunta.Text = "";
            hfIdPregunta.Value = "0";
            PreguntaCN.Eliminar(Convert.ToInt32(hfIdPregunta.Value));
            rRespuestas.DataSource = null;
            rRespuestas.DataBind();
        }

        protected void btnConfirmacion_Click(object sender, EventArgs e)
        {
            var objConcurso = new ConcursoEN();
            objConcurso.ID = Convert.ToInt32(hfIdConcurso.Value);
            if (ConcursoCN.Activar(objConcurso) == 1)
            {
                lblErrorConfirmacion.Text = "";
                lblConfirmado.Text = "El concurso ha sido registrado satisfactoriamente";
                LimpiarCamposConcurso();
                LimpiarCamposPregunta();
                pPreguntas.Enabled = false;
                pDatosConcurso.Enabled = true;
                btnCancelar.Enabled = true;
                btnConfirmacion.Enabled = true;
            }
            else
            {
                lblErrorConfirmacion.Text = "No se ha podido registrar el concurso";
                lblConfirmado.Text = "";
            }
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            lblErrorConfirmacion.Text = "";
            lblConfirmado.Text = "";
            LimpiarCamposConcurso();
            LimpiarCamposPregunta();
            pPreguntas.Enabled = false;
            pDatosConcurso.Enabled = true;
        }
    }
}